1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.caliper.BeforeExperiment;
20 import com.google.caliper.Benchmark;
21 import com.google.caliper.Param;
22 import com.google.common.base.Preconditions;
23
24 import java.util.Random;
25
26
27
28
29
30
31 public class MultisetIteratorBenchmark {
32 @Param({"0", "1", "16", "256", "4096", "65536"}) int size;
33
34 LinkedHashMultiset<Object> linkedHashMultiset;
35 HashMultiset<Object> hashMultiset;
36
37
38 TreeMultiset<Integer> treeMultiset;
39
40 @BeforeExperiment void setUp() {
41 hashMultiset = HashMultiset.create(size);
42 linkedHashMultiset = LinkedHashMultiset.create(size);
43 treeMultiset = TreeMultiset.create();
44
45 Random random = new Random();
46
47 int sizeRemaining = size;
48
49
50 for (int i = 0; sizeRemaining > 0; i++) {
51
52 Integer value = random.nextInt(1000) + 128;
53 int count = Math.min(random.nextInt(10) + 1, sizeRemaining);
54 sizeRemaining -= count;
55 hashMultiset.add(value, count);
56 linkedHashMultiset.add(value, count);
57 treeMultiset.add(value, count);
58 }
59
60
61 Preconditions.checkState(hashMultiset.size() == size);
62 }
63
64 @Benchmark int hashMultiset(int reps) {
65 int sum = 0;
66 for (int i = 0; i < reps; i++) {
67 for (Object value : hashMultiset) {
68 sum += value.hashCode();
69 }
70 }
71 return sum;
72 }
73
74 @Benchmark int linkedHashMultiset(int reps) {
75 int sum = 0;
76 for (int i = 0; i < reps; i++) {
77 for (Object value : linkedHashMultiset) {
78 sum += value.hashCode();
79 }
80 }
81 return sum;
82 }
83
84 @Benchmark int treeMultiset(int reps) {
85 int sum = 0;
86 for (int i = 0; i < reps; i++) {
87 for (Object value : treeMultiset) {
88 sum += value.hashCode();
89 }
90 }
91 return sum;
92 }
93 }